package com.wei.czz.framework.admin.controller;

import com.wei.czz.common.annotation.AuthLogin;
import com.wei.czz.common.dto.admin.UserMessageDto;
import com.wei.czz.common.enums.admin.user.UserMessageEnum;
import com.wei.czz.common.tool.PageDto;
import com.wei.czz.common.tool.Result;
import com.wei.czz.common.vo.admin.userMessage.UserMessageFormVo;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;

import com.wei.czz.framework.admin.service.UserMessageService;

/**
 * Created by IntelliJ IDEA.
 *
 * @author wei
 * date: 2022-03-10 23:00:19
 * className: UserMessageController 用户消息操作请求接口类
 * version: 1.0
 * description:
 */
@RestController
@RequestMapping("sys/user-message")
@AllArgsConstructor
public class UserMessageController {

    private static final Logger log = LoggerFactory.getLogger(UserMessageController.class);

    private final UserMessageService userMessageService;

    /**
     * 获取用户未查看消息个数个数接口
     *
     * 调用方：
     *  1、浏览器-后台管理页
     *
     * @return 请求结果
     */
    @GetMapping("/unread/count")
    @AuthLogin
    public Result<Long> getUnreadUserMessageCount() {

        Long count = userMessageService.getUnreadUserMessageCount();

        return Result.success(count);
    }

    /**
     * 分页查询用户消息列表接口
     *
     * 调用方：
     *  1、浏览器-后台管理页-个人中心页面调用
     *
     * @param userMessageFormVo 用户消息请求参数表单对象
     * @return 用户消息列表
     */
    @PostMapping("/list")
    @AuthLogin
    public Result<PageDto<UserMessageDto>> getUserMessageList(@RequestBody UserMessageFormVo userMessageFormVo) {
        log.info("开始分页查询用户消息列表业务。{}", userMessageFormVo);

        if (userMessageFormVo.getMessageType() == null) {
            log.info("分页查询用户消息列表接口请求参数错误");
            return Result.paramFail();
        }
        if (!UserMessageEnum.isMsgTypeParam(userMessageFormVo.getMessageType())) {
            log.info("分页查询用户消息列表接口请求参数错误，查询的消息类型不存在");
            return Result.paramFail();
        }

        PageDto<UserMessageDto> pageDto = userMessageService.getUserMessageList(userMessageFormVo);

        log.info("分页查询用户消息列表业务结束");
        return Result.success(pageDto);
    }

    /**
     * 用户消息被阅读接口
     * 根据消息主键，将用户消息的阅读标记改为已’查看‘
     *
     * 调用方：
     *  1、浏览器-后台管理页-个人中心页面调用
     *
     * @param messageId 消息主键参数值
     * @return 请求结果
     */
    @GetMapping("/read")
    @AuthLogin
    public Result<Object> userMessageRead(@RequestParam("messageId") String messageId) {

        if (StringUtils.isBlank(messageId)) {
            log.info("用户消息被阅读接口请求参数错误");
            return Result.paramFail();
        }

        userMessageService.userMessageRead(messageId);

        return Result.success();
    }

    /**
     * 删除用户消息接口
     * 根据消息主键，将用户消息的删除标记改为’删除‘
     *
     * 调用方：
     *  1、浏览器-后台管理页-个人中心页面调用
     * @param messageId 消息主键参数值
     * @return 请求结果
     */
    @DeleteMapping("/delete")
    @AuthLogin
    public Result<Object> userMessageDelete(@RequestParam("messageId") String messageId) {

        if (StringUtils.isBlank(messageId)) {
            log.info("删除用户消息接口请求参数错误");
            return Result.paramFail();
        }

        userMessageService.userMessageDelete(messageId);

        return Result.success();
    }
}
